home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C/C++ Users Group Library 1996 July
/
C-C++ Users Group Library July 1996.iso
/
listings
/
v_08_07
/
8n07121a
< prev
next >
Wrap
Text File
|
1990-06-17
|
3KB
|
109 lines
/* Listing 6*/
/*----------------- PINLIST.H--------------------*/
#include "pinnacle.h"
#include "list.h"
#define PINNACLE_LIST_CLASS LIST_CLASS \
/* Pinnacle Database Object */ DB db; \
/*Pinnacle Database Table */ DBTAB table; \
/* Boolean flags*/ unsigned is_at_top, is_at_bottom;
typedef struct pinnacle_list {
PINNACLE_LIST_CLASS
} PINNACLE_LIST;
PINNACLE_LIST *new_pinnacle_list(char *database,
char *table);
/*------------------- PINLIST.C ------------------*/
#include "pinlist.h"
static long total_members(PINNACLE_LIST *this) {
return((long) DB_CountRows(this->table));
}
static unsigned at_top(PINNACLE_LIST *this) {
return(this->is_at_top);
}
static unsigned at_end(PINNACLE_LIST *this) {
return(this->is_at_bottom);
}
static void prev(PINNACLE_LIST *this) {
if (DB_NextRow(this->table, DBPREVIOUS))
this->is_at_top = FALSE;
else
this->is_at_top = TRUE;
if (this->total_members(this) > 1)
this->is_at_bottom = FALSE;
}
static void next(PINNACLE_LIST *this) {
if (DB_NextRow(this->table, DBNEXT))
this->is_at_bottom = FALSE;
else
this->is_at_bottom = TRUE;
if (this->total_members(this) > 1)
this->is_at_top = FALSE;
}
static void top(PINNACLE_LIST *this) {
DB_FirstRow(this->table);
DB_NextRow(this->table,DBNEXT);
this->is_at_top = TRUE;
if (this->total_members(this) > 1)
this->is_at_bottom = FALSE;
}
static void end(PINNACLE_LIST *this) {
DB_ForAllRows(this->table);
this->is_at_bottom = TRUE;
if (this->total_members(this) > 1)
this->is_at_top = FALSE;
}
static long tell(PINNACLE_LIST *this) {
DBROWID thisrow, checkrow;
long position = 0L;
thisrow = DB_CurrentRow(this->table);
this->top(this);
checkrow = DB_CurrentRow(this->table);
while(checkrow != thisrow) {
++position;
DB_NextRow(this->table,DBNEXT);
checkrow = DB_CurrentRow(this->table);
}
return(position);
}
PINNACLE_LIST *new_pinnacle_list(char *datab,char *table) {
PINNACLE_LIST *this;
LIST *l;
l = new_list();
if (l == NULL)
return(NULL);
this = calloc(1,sizeof(PINNACLE_LIST));
if (this == NULL) {
destroy_list(l); return(NULL);
}
memmove(this,l,sizeof(LIST)); free(l);
this->db = DB_Open(datab,"rw",0);
this->table = DB_Table(this->db,table);
this->total_members = total_members;
this->at_top = at_top; this->at_end = at_end;
this->prev = prev; this->next = next;
this->top = top; this->end = end; this->tell = tell;
return(this);
}
destroy_pinnacle_list(PINNACLE_LIST *this) {
DB_Close(this->db); destroy_list(this);
}